/* Die Klasse EmailParser
 * 
 * Die Klasse EmailParser ist eine Subklasse von der TuringMaschine. 
 * Hier befindet sich die Initialisierug zur Erkennung einer gueltigen 
 * Email-Adrese. 
 * 
 * 
 * Datei:  EmailParser.java		Autor:    Martin Fischer
 * Datum:  16.11.2011                 	Version:  1.1
 * 
 * 
 */

package kommunikation.Parser;

public class EmailParser extends TuringMaschine
{
  /*
   * Diese Methode Initialisiert die Turingmaschine Es wird eine Menge
   * gebrauchter Zustaende erzeugt. Jedem Zustnd wird keine oder mehrere
   * Konfigurationen zugewiesen. Es Wird ein neues Alphabet erzeugt (ein
   * String mit allen gueltigen Zeichen. Es wird ein neues Band erezugt
   * dem das Alphabet und das zu pruefende Wort uebergeben.
   */
  public void initialisieren (String eingabewort)
  {
    String alphabet = "*abcdefghijklmnopqrstuvwxyz\u00e4\u00f6\u00fc"
	+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ\u00c4\u00d6\u00dc0123456789"
	+ ",_-!?=)(/&%$~'#+><|:;.@";

    zustaende = new Zustand[8];
    for (int i = 0; i < zustaende.length; i++)
    {
      zustaende[i] = new Zustand (i);
    }
    /* Zusatnd 0 */
    for (int i = 0; i < alphabet.length () - 1; i++)
    {
      zustaende[0].konfigHinzufuegen (alphabet.charAt (i),
	  alphabet.charAt (i), Konfig.R, zustaende[1]);
    }
    zustaende[0].konfigHinzufuegen ('@', '@', Konfig.R, zustaende[7]);
    /* Zustand 1 */
    for (int i = 1; i < alphabet.length () - 1; i++)
    {
      zustaende[1].konfigHinzufuegen (alphabet.charAt (i),
	  alphabet.charAt (i), Konfig.R, zustaende[1]);
    }
    zustaende[1].konfigHinzufuegen ('*', '*', Konfig.R, zustaende[7]);
    zustaende[1].konfigHinzufuegen ('@', '@', Konfig.R, zustaende[2]);
    /* Zustand 2 */
    for (int i = 1; i < alphabet.length () - 1; i++)
    {
      zustaende[2].konfigHinzufuegen (alphabet.charAt (i),
	  alphabet.charAt (i), Konfig.R, zustaende[3]);
    }
    zustaende[2].konfigHinzufuegen ('*', '*', Konfig.R, zustaende[7]);
    zustaende[2].konfigHinzufuegen ('@', '@', Konfig.R, zustaende[7]);
    /* Zustand 3 */
    for (int i = 1; i < alphabet.length () - 2; i++)
    {
      zustaende[3].konfigHinzufuegen (alphabet.charAt (i),
	  alphabet.charAt (i), Konfig.R, zustaende[3]);
    }
    zustaende[3].konfigHinzufuegen ('*', '*', Konfig.R, zustaende[7]);
    zustaende[3].konfigHinzufuegen ('@', '@', Konfig.R, zustaende[7]);
    zustaende[3].konfigHinzufuegen ('.', '.', Konfig.R, zustaende[4]);
    /* Zustand 4 */
    for (int i = 1; i <= 59; i++)
    {
      zustaende[4].konfigHinzufuegen (alphabet.charAt (i),
	  alphabet.charAt (i), Konfig.R, zustaende[5]);
    }
    zustaende[4].konfigHinzufuegen ('*', '*', Konfig.R, zustaende[7]);
    for (int i = 60; i < alphabet.length (); i++)
    {
      zustaende[4].konfigHinzufuegen (alphabet.charAt (i),
	  alphabet.charAt (i), Konfig.R, zustaende[7]);
    }
    /* Zustand 5 */
    for (int i = 1; i <= 59; i++)
    {
      zustaende[5].konfigHinzufuegen (alphabet.charAt (i),
	  alphabet.charAt (i), Konfig.R, zustaende[5]);
    }
    zustaende[5].konfigHinzufuegen ('*', '*', Konfig.R, zustaende[6]);
    for (int i = 60; i < alphabet.length () - 2; i++)
    {
      zustaende[5].konfigHinzufuegen (alphabet.charAt (i),
	  alphabet.charAt (i), Konfig.R, zustaende[7]);
    }
    zustaende[5].konfigHinzufuegen ('@', '@', Konfig.R, zustaende[7]);
    zustaende[5].konfigHinzufuegen ('.', '.', Konfig.R, zustaende[4]);

    
    Alphabet a = new Alphabet (alphabet);
    band = new Band (a, eingabewort);
    aktuellerZustand = zustaende[0];
    fehlerZustand = zustaende[7];
  }
}
